"""
数据库连接和会话管理
"""
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from .config import settings

# 创建数据库引擎
# echo=True 会打印所有SQL语句，便于调试
engine = create_engine(
    settings.database_url,
    echo=settings.debug  # 开发环境显示SQL语句
)

# 创建会话工厂
# autocommit=False: 需要手动提交事务
# autoflush=False: 需要手动刷新到数据库
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# 创建基础模型类
# 所有数据库模型都会继承这个类
Base = declarative_base()

def get_db():
    """
    获取数据库会话的依赖函数
    FastAPI 会自动管理这个会话的生命周期
    """
    db = SessionLocal()
    try:
        yield db  # 返回数据库会话
    finally:
        db.close()  # 确保会话被关闭